home *** CD-ROM | disk | FTP | other *** search
/ Network Supervisor's Toolkit / Network Supervisor's Toolkit.iso / tools / lu62 / proc / ftpanel.c < prev    next >
C/C++ Source or Header  |  1996-07-10  |  6KB  |  243 lines

  1. /*
  2.  * CopyRight 1995. Nicholas Poljakov all rights reserved.
  3.  */
  4. #include <malloc.h>
  5. #include <dos.h>
  6. #include <stdio.h>
  7. #include "state1.h"
  8. #include "vto.h"
  9. #define  ACSEND  '\x6C'   /*  ¬«¡Ñµ »«½∩ */
  10. #define  SBA     '\x11'   /*  πßΓá¡«ó¿Γ∞ áñpÑß íπΣÑpá */
  11. #define  SF      '\x1D'   /*  ¡áτὫ »«½∩ */
  12.  
  13. tpanel(tp_id,conv_id,code,sub_code,position,data_ptr,
  14.        n,p_rc,s_hdr)
  15.  
  16.  unsigned char tp_id[8];
  17.  unsigned long conv_id;
  18.  unsigned char   code;
  19.  unsigned char   sub_code;
  20.  unsigned char   position[2];
  21.  unsigned char   *data_ptr;
  22.  unsigned int    n;
  23.  struct   rc {
  24.  unsigned   int   prim ;
  25.  unsigned   long  sec  ; }  *p_rc;
  26.  struct shdr {
  27.  unsigned   int   aid ;
  28.  unsigned   char  col ;
  29.  unsigned   char  row ; } * s_hdr;
  30.  
  31.          {
  32.   char *vtout(),*out_flow;
  33.   void   vtin();
  34.   char *p;
  35.   unsigned int length,len,addr;
  36.   unsigned char rts;
  37.   char *d_ptr;
  38.   int max_length;
  39.   unsigned    char wr;      /*what receive */
  40.   char *out_str;
  41.  
  42.      switch (code) {
  43.  
  44.      case  W :
  45.      case  EW:
  46.      case  E :
  47.      case  EU:
  48.      case  WB :
  49.  
  50.      out_flow = vtout(data_ptr,n);
  51.      length = strlen(out_flow) + 2;
  52.      if ((out_str = malloc(length + 2 + 1)) == NULL) {
  53.     return -1;
  54.      }
  55.      strcpy(&out_str[2], out_flow);
  56.      out_str[0] = code;
  57.      out_str[1] = sub_code;
  58.      send_data (tp_id, conv_id, out_str, 0,0, length, p_rc, &rts);
  59.      free( out_str );
  60.  
  61.          return (p_rc);
  62.          break;
  63.  
  64.     case R :
  65.     case RM :
  66.     case TM :
  67.     case TP :
  68.  
  69.      if ((out_str = malloc( 2 )) == NULL) {
  70.     return -1;
  71.      }
  72.      out_str[0] = code;
  73.      out_str[1] = sub_code;
  74.     length = 2;
  75.     send_data (tp_id, conv_id, out_str, 0,0, length, p_rc, &rts);
  76.     free( out_str );
  77.  
  78.     max_length = 2017;
  79.     recwait (tp_id, conv_id, ll, p_rc, &len, max_length, &rts, d_ptr, &wr);
  80.  
  81.  
  82.   s_hdr-> aid =d_ptr[1];
  83.   addr = (d_ptr[2] & 0x3f) * 64 + (d_ptr[3] & 0x3f);
  84.   s_hdr->col = addr % 80 + 1;
  85.   s_hdr->row = addr / 80 + 1;
  86.  
  87.   length = len - 3;
  88.      vtin((d_ptr+3),length,data_ptr,n);
  89.      return(s_hdr,data_ptr);
  90.        }
  91.  }
  92. /*--------------------- vtin ----------------------------*/
  93.  
  94.    void   vtin(p,lengvp,pst,nStr)
  95.    char   *p;
  96.    struct area *pst;
  97.    int    lengvp,nStr;
  98.  
  99. {
  100.       int  i,j,ind,rp=0;
  101.       struct area *p1;
  102.       unsigned int addr;
  103.  
  104.   for(j=0; j < nStr; j++)
  105.     {
  106.        p1=pst+j;
  107.  
  108.        if(*p == SBA)
  109.      {
  110.          addr = (*(p+1) & 0x3f) * 64 + (*(p+2) & 0x3f);
  111.            p1 -> row = addr/80 + 1;
  112.            p1 -> column = addr % 80 + 1;
  113.            goto m;
  114.     printf("ERROR\n");goto end;
  115.  
  116.     m: ind=0;
  117.           rp=rp+3;
  118.  
  119.       while(*(p + 3 + ind)!=SBA)
  120.            {
  121.         *((p1->data_in)+ind)=*((p+3)+ind);
  122.  
  123.         ind++;
  124.          rp++;
  125.  
  126.              if(rp > lengvp)
  127.                {
  128.                  p1->length=ind-1;
  129.                  goto end;
  130.                }  /* end if */
  131.  
  132.         } /* end while */
  133.         p1 -> length = ind;
  134.         p=p+3+ind;
  135.  
  136.      } /* end if */
  137.  
  138.     }  /* end for */
  139.   end: ;
  140.  
  141. }     /* end vtin */
  142.  
  143.  
  144. /*--------------------- vtout ----------------------------*/
  145.  
  146.    char *vtout(p,nStr)
  147.    struct area *p;
  148.    int         nStr;
  149. {
  150.   char screen[64];
  151.       unsigned int addr;
  152.       unsigned int j,z,RP=0,RP1=0,SHAB;
  153.       char       ACS,*pvp,*p2;
  154.       struct area *p1;
  155.       int A,B;
  156. #include "tablecod.h"
  157.  
  158. /*--------------------------------------------------------*/
  159.  
  160.       for(j=0; j < nStr; j++)
  161.      {
  162.      p1=p+j;
  163.      RP1=(p1->length) + FSIZEWP + RP1;
  164.      };     /* end for */
  165.  
  166.      pvp=malloc(RP1);
  167.      p2 = pvp;
  168.  
  169.     for(z=0; z < nStr; z++)
  170.        {
  171.          SHAB = 0;
  172.          p1=p+z;
  173.          RP = p1 -> flag.protected;
  174.          SHAB = SHAB | RP;
  175.          SHAB = SHAB << 1;
  176.          RP = p1 -> flag.digit;
  177.          SHAB = SHAB | RP;
  178.          SHAB = SHAB << 2;
  179.          RP = p1 -> flag.displayed;
  180.          SHAB = SHAB | RP;
  181.          SHAB = SHAB << 2;
  182.          RP = p1 -> flag.modified;
  183.          SHAB = SHAB | RP;
  184.  
  185.      switch(SHAB){
  186.          case  0  : ACS='\x40';break;
  187.          case  1  : ACS='\xC1';break;
  188.          case  4  : ACS='\xC4';break;
  189.          case  5  : ACS='\xC5';break;
  190.          case  8  : ACS='\xC8';break;
  191.          case  9  : ACS='\xC9';break;
  192.          case 12  : ACS='\x4C';break;
  193.          case 13  : ACS='\x4D';break;
  194.          case 16  : ACS='\x50';break;
  195.          case 17  : ACS='\xD1';break;
  196.          case 20  : ACS='\xD4';break;
  197.          case 21  : ACS='\xD5';break;
  198.          case 24  : ACS='\xD8';break;
  199.          case 25  : ACS='\xD9';break;
  200.          case 28  : ACS='\x5C';break;
  201.          case 29  : ACS='\x5D';break;
  202.          case 32  : ACS='\x60';break;
  203.          case 33  : ACS='\x61';break;
  204.          case 36  : ACS='\xE4';break;
  205.          case 37  : ACS='\xE5';break;
  206.          case 40  : ACS='\xE8';break;
  207.          case 41  : ACS='\xE9';break;
  208.          case 44  : ACS='\x6C';break;
  209.          case 45  : ACS='\x6D';break;
  210.          case 48  : ACS='\xF0';break;
  211.          case 49  : ACS='\xF1';break;
  212.          case 52  : ACS='\xF4';break;
  213.          case 53  : ACS='\xF5';break;
  214.          case 56  : ACS='\xF8';break;
  215.          case 57  : ACS='\xF9';break;
  216.          case 60  : ACS='\x7C';break;
  217.          case 61  : ACS='\x7D';break;
  218.          default  : break;
  219.                }  /* end switch */
  220.  
  221.            *p2 = SBA;
  222.  
  223.            addr = (p1->row-1)*80+(p1->column-1);
  224.            A = addr / 64 ;
  225.            B = addr % 64 ;
  226.  
  227.            *(p2+1) = screen[A];
  228.            *(p2+2) = screen[B];
  229.            *(p2+3) = SF;
  230.            *(p2+4) = ACS;
  231.            strncpy((p2+5),p1 -> data_out,p1 ->length);
  232.            *(p2+5+(p1->length)) = SF;
  233.            *(p2+6+(p1->length)) = ACSEND;
  234.            p2 = (p2+FSIZEWP+(p1->length));
  235.         }   /* end for */
  236.  
  237.  
  238. /*--------------------------------------------------------*/
  239.  
  240.      return(pvp);
  241.  
  242. }    /* end vtout */
  243.